{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# StackingClassifier: Simple stacking"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "An ensemble-learning meta-classifier for stacking."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "> from mlxtend.classifier import StackingClassifier"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Overview"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Stacking is an ensemble learning technique to combine multiple classification models via a meta-classifier. The individual classification models are trained based on the complete training set; then, the meta-classifier is fitted based on the outputs -- meta-features -- of the individual classification models in the ensemble.\n",
    "The meta-classifier can either be trained on the predicted class labels or probabilities from the ensemble."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![](./StackingClassifier_files/stackingclassification_overview.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The algorithm can be summarized as follows (source: [1]):\n",
    "    \n",
    "![](./StackingClassifier_files/stacking_algorithm.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Please note that this type of Stacking is prone to overfitting due to information leakage. The related [StackingCVClassifier.md](StackingCVClassifier.md) does not derive the predictions for the 2nd-level classifier from the same datast that was used for training the level-1 classifiers and is recommended instead.**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### References\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- [1] Tang, J., S. Alelyani, and H. Liu. \"[Data Classification: Algorithms and Applications.](https://books.google.com/books?id=nwQZCwAAQBAJ&lpg=PA500&dq=stacking%20classifier%20subsets&pg=PA499#v=onepage&q&f=false)\" Data Mining and Knowledge Discovery Series, CRC Press (2015): pp. 498-500.\n",
    "- [2] Wolpert, David H. \"[Stacked generalization.](https://www.sciencedirect.com/science/article/pii/S0893608005800231)\" Neural networks 5.2 (1992): 241-259.\n",
    "- [3] Marios Michailidis (2017), StackNet, StackNet Meta Modelling Framework, https://github.com/kaz-Anova/StackNet"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Example 1 - Simple Stacked Classification"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn import datasets\n",
    "\n",
    "iris = datasets.load_iris()\n",
    "X, y = iris.data[:, 1:3], iris.target"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3-fold cross validation:\n",
      "\n",
      "Accuracy: 0.91 (+/- 0.01) [KNN]\n",
      "Accuracy: 0.95 (+/- 0.01) [Random Forest]\n",
      "Accuracy: 0.91 (+/- 0.02) [Naive Bayes]\n",
      "Accuracy: 0.95 (+/- 0.02) [StackingClassifier]\n"
     ]
    }
   ],
   "source": [
    "from sklearn import model_selection\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.neighbors import KNeighborsClassifier\n",
    "from sklearn.naive_bayes import GaussianNB \n",
    "from sklearn.ensemble import RandomForestClassifier\n",
    "from mlxtend.classifier import StackingClassifier\n",
    "import numpy as np\n",
    "import warnings\n",
    "\n",
    "warnings.simplefilter('ignore')\n",
    "\n",
    "clf1 = KNeighborsClassifier(n_neighbors=1)\n",
    "clf2 = RandomForestClassifier(random_state=1)\n",
    "clf3 = GaussianNB()\n",
    "lr = LogisticRegression()\n",
    "sclf = StackingClassifier(classifiers=[clf1, clf2, clf3], \n",
    "                          meta_classifier=lr)\n",
    "\n",
    "print('3-fold cross validation:\\n')\n",
    "\n",
    "for clf, label in zip([clf1, clf2, clf3, sclf], \n",
    "                      ['KNN', \n",
    "                       'Random Forest', \n",
    "                       'Naive Bayes',\n",
    "                       'StackingClassifier']):\n",
    "\n",
    "    scores = model_selection.cross_val_score(clf, X, y, \n",
    "                                              cv=3, scoring='accuracy')\n",
    "    print(\"Accuracy: %0.2f (+/- %0.2f) [%s]\" \n",
    "          % (scores.mean(), scores.std(), label))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 720x576 with 4 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "from mlxtend.plotting import plot_decision_regions\n",
    "import matplotlib.gridspec as gridspec\n",
    "import itertools\n",
    "\n",
    "gs = gridspec.GridSpec(2, 2)\n",
    "\n",
    "fig = plt.figure(figsize=(10,8))\n",
    "\n",
    "for clf, lab, grd in zip([clf1, clf2, clf3, sclf], \n",
    "                         ['KNN', \n",
    "                          'Random Forest', \n",
    "                          'Naive Bayes',\n",
    "                          'StackingClassifier'],\n",
    "                          itertools.product([0, 1], repeat=2)):\n",
    "\n",
    "    clf.fit(X, y)\n",
    "    ax = plt.subplot(gs[grd[0], grd[1]])\n",
    "    fig = plot_decision_regions(X=X, y=y, clf=clf)\n",
    "    plt.title(lab)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Example 2 - Using Probabilities as Meta-Features"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Alternatively, the class-probabilities of the first-level classifiers can be used to train the meta-classifier (2nd-level classifier) by setting `use_probas=True`. If `average_probas=True`, the probabilities of the level-1 classifiers are averaged, if `average_probas=False`, the probabilities are stacked (recommended). For example, in a 3-class setting with 2 level-1 classifiers, these classifiers may make the following \"probability\" predictions for 1 training sample:\n",
    "\n",
    "- classifier 1: [0.2, 0.5, 0.3]\n",
    "- classifier 2: [0.3, 0.4, 0.4]\n",
    "\n",
    "If `average_probas=True`, the meta-features would be:\n",
    "\n",
    "- [0.25, 0.45, 0.35]\n",
    "\n",
    "In contrast, using `average_probas=False` results in k features where, k = [n_classes * n_classifiers], by stacking these level-1 probabilities:\n",
    "\n",
    "- [0.2, 0.5, 0.3, 0.3, 0.4, 0.4]\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3-fold cross validation:\n",
      "\n",
      "Accuracy: 0.91 (+/- 0.01) [KNN]\n",
      "Accuracy: 0.95 (+/- 0.01) [Random Forest]\n",
      "Accuracy: 0.91 (+/- 0.02) [Naive Bayes]\n",
      "Accuracy: 0.92 (+/- 0.02) [StackingClassifier]\n"
     ]
    }
   ],
   "source": [
    "clf1 = KNeighborsClassifier(n_neighbors=1)\n",
    "clf2 = RandomForestClassifier(random_state=1)\n",
    "clf3 = GaussianNB()\n",
    "lr = LogisticRegression()\n",
    "sclf = StackingClassifier(classifiers=[clf1, clf2, clf3],\n",
    "                          use_probas=True,\n",
    "                          average_probas=False,\n",
    "                          meta_classifier=lr)\n",
    "\n",
    "print('3-fold cross validation:\\n')\n",
    "\n",
    "for clf, label in zip([clf1, clf2, clf3, sclf], \n",
    "                      ['KNN', \n",
    "                       'Random Forest', \n",
    "                       'Naive Bayes',\n",
    "                       'StackingClassifier']):\n",
    "\n",
    "    scores = model_selection.cross_val_score(clf, X, y, \n",
    "                                              cv=3, scoring='accuracy')\n",
    "    print(\"Accuracy: %0.2f (+/- %0.2f) [%s]\" \n",
    "          % (scores.mean(), scores.std(), label))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Example 3 - Stacked Classification and GridSearch"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The stack allows tuning hyper parameters of the base and meta models! A full list of tunable parameters can be obtained via `estimator.get_params().keys()`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.933 +/- 0.03 {'kneighborsclassifier__n_neighbors': 1, 'meta_classifier__C': 0.1, 'randomforestclassifier__n_estimators': 10}\n",
      "0.940 +/- 0.02 {'kneighborsclassifier__n_neighbors': 1, 'meta_classifier__C': 0.1, 'randomforestclassifier__n_estimators': 50}\n",
      "0.927 +/- 0.03 {'kneighborsclassifier__n_neighbors': 1, 'meta_classifier__C': 10.0, 'randomforestclassifier__n_estimators': 10}\n",
      "0.947 +/- 0.02 {'kneighborsclassifier__n_neighbors': 1, 'meta_classifier__C': 10.0, 'randomforestclassifier__n_estimators': 50}\n",
      "0.947 +/- 0.02 {'kneighborsclassifier__n_neighbors': 5, 'meta_classifier__C': 0.1, 'randomforestclassifier__n_estimators': 10}\n",
      "0.947 +/- 0.02 {'kneighborsclassifier__n_neighbors': 5, 'meta_classifier__C': 0.1, 'randomforestclassifier__n_estimators': 50}\n",
      "0.933 +/- 0.02 {'kneighborsclassifier__n_neighbors': 5, 'meta_classifier__C': 10.0, 'randomforestclassifier__n_estimators': 10}\n",
      "0.940 +/- 0.02 {'kneighborsclassifier__n_neighbors': 5, 'meta_classifier__C': 10.0, 'randomforestclassifier__n_estimators': 50}\n",
      "Best parameters: {'kneighborsclassifier__n_neighbors': 1, 'meta_classifier__C': 10.0, 'randomforestclassifier__n_estimators': 50}\n",
      "Accuracy: 0.95\n"
     ]
    }
   ],
   "source": [
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.neighbors import KNeighborsClassifier\n",
    "from sklearn.naive_bayes import GaussianNB \n",
    "from sklearn.ensemble import RandomForestClassifier\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from mlxtend.classifier import StackingClassifier\n",
    "\n",
    "# Initializing models\n",
    "\n",
    "clf1 = KNeighborsClassifier(n_neighbors=1)\n",
    "clf2 = RandomForestClassifier(random_state=1)\n",
    "clf3 = GaussianNB()\n",
    "lr = LogisticRegression()\n",
    "sclf = StackingClassifier(classifiers=[clf1, clf2, clf3], \n",
    "                          meta_classifier=lr)\n",
    "\n",
    "params = {'kneighborsclassifier__n_neighbors': [1, 5],\n",
    "          'randomforestclassifier__n_estimators': [10, 50],\n",
    "          'meta_classifier__C': [0.1, 10.0]}\n",
    "\n",
    "grid = GridSearchCV(estimator=sclf, \n",
    "                    param_grid=params, \n",
    "                    cv=5,\n",
    "                    refit=True)\n",
    "grid.fit(X, y)\n",
    "\n",
    "cv_keys = ('mean_test_score', 'std_test_score', 'params')\n",
    "\n",
    "for r, _ in enumerate(grid.cv_results_['mean_test_score']):\n",
    "    print(\"%0.3f +/- %0.2f %r\"\n",
    "          % (grid.cv_results_[cv_keys[0]][r],\n",
    "             grid.cv_results_[cv_keys[1]][r] / 2.0,\n",
    "             grid.cv_results_[cv_keys[2]][r]))\n",
    "\n",
    "print('Best parameters: %s' % grid.best_params_)\n",
    "print('Accuracy: %.2f' % grid.best_score_)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In case we are planning to use a regression algorithm multiple times, all we need to do is to add an additional number suffix in the parameter grid as shown below:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.933 +/- 0.03 {'kneighborsclassifier-1__n_neighbors': 1, 'kneighborsclassifier-2__n_neighbors': 1, 'meta_classifier__C': 0.1, 'randomforestclassifier__n_estimators': 10}\n",
      "0.940 +/- 0.02 {'kneighborsclassifier-1__n_neighbors': 1, 'kneighborsclassifier-2__n_neighbors': 1, 'meta_classifier__C': 0.1, 'randomforestclassifier__n_estimators': 50}\n",
      "0.927 +/- 0.03 {'kneighborsclassifier-1__n_neighbors': 1, 'kneighborsclassifier-2__n_neighbors': 1, 'meta_classifier__C': 10.0, 'randomforestclassifier__n_estimators': 10}\n",
      "0.947 +/- 0.02 {'kneighborsclassifier-1__n_neighbors': 1, 'kneighborsclassifier-2__n_neighbors': 1, 'meta_classifier__C': 10.0, 'randomforestclassifier__n_estimators': 50}\n",
      "0.940 +/- 0.02 {'kneighborsclassifier-1__n_neighbors': 1, 'kneighborsclassifier-2__n_neighbors': 5, 'meta_classifier__C': 0.1, 'randomforestclassifier__n_estimators': 10}\n",
      "0.947 +/- 0.02 {'kneighborsclassifier-1__n_neighbors': 1, 'kneighborsclassifier-2__n_neighbors': 5, 'meta_classifier__C': 0.1, 'randomforestclassifier__n_estimators': 50}\n",
      "0.933 +/- 0.03 {'kneighborsclassifier-1__n_neighbors': 1, 'kneighborsclassifier-2__n_neighbors': 5, 'meta_classifier__C': 10.0, 'randomforestclassifier__n_estimators': 10}\n",
      "0.953 +/- 0.02 {'kneighborsclassifier-1__n_neighbors': 1, 'kneighborsclassifier-2__n_neighbors': 5, 'meta_classifier__C': 10.0, 'randomforestclassifier__n_estimators': 50}\n",
      "0.940 +/- 0.02 {'kneighborsclassifier-1__n_neighbors': 5, 'kneighborsclassifier-2__n_neighbors': 1, 'meta_classifier__C': 0.1, 'randomforestclassifier__n_estimators': 10}\n",
      "0.947 +/- 0.02 {'kneighborsclassifier-1__n_neighbors': 5, 'kneighborsclassifier-2__n_neighbors': 1, 'meta_classifier__C': 0.1, 'randomforestclassifier__n_estimators': 50}\n",
      "0.933 +/- 0.03 {'kneighborsclassifier-1__n_neighbors': 5, 'kneighborsclassifier-2__n_neighbors': 1, 'meta_classifier__C': 10.0, 'randomforestclassifier__n_estimators': 10}\n",
      "0.953 +/- 0.02 {'kneighborsclassifier-1__n_neighbors': 5, 'kneighborsclassifier-2__n_neighbors': 1, 'meta_classifier__C': 10.0, 'randomforestclassifier__n_estimators': 50}\n",
      "0.953 +/- 0.02 {'kneighborsclassifier-1__n_neighbors': 5, 'kneighborsclassifier-2__n_neighbors': 5, 'meta_classifier__C': 0.1, 'randomforestclassifier__n_estimators': 10}\n",
      "0.953 +/- 0.02 {'kneighborsclassifier-1__n_neighbors': 5, 'kneighborsclassifier-2__n_neighbors': 5, 'meta_classifier__C': 0.1, 'randomforestclassifier__n_estimators': 50}\n",
      "0.933 +/- 0.02 {'kneighborsclassifier-1__n_neighbors': 5, 'kneighborsclassifier-2__n_neighbors': 5, 'meta_classifier__C': 10.0, 'randomforestclassifier__n_estimators': 10}\n",
      "0.940 +/- 0.02 {'kneighborsclassifier-1__n_neighbors': 5, 'kneighborsclassifier-2__n_neighbors': 5, 'meta_classifier__C': 10.0, 'randomforestclassifier__n_estimators': 50}\n",
      "Best parameters: {'kneighborsclassifier-1__n_neighbors': 1, 'kneighborsclassifier-2__n_neighbors': 5, 'meta_classifier__C': 10.0, 'randomforestclassifier__n_estimators': 50}\n",
      "Accuracy: 0.95\n"
     ]
    }
   ],
   "source": [
    "from sklearn.model_selection import GridSearchCV\n",
    "\n",
    "# Initializing models\n",
    "\n",
    "clf1 = KNeighborsClassifier(n_neighbors=1)\n",
    "clf2 = RandomForestClassifier(random_state=1)\n",
    "clf3 = GaussianNB()\n",
    "lr = LogisticRegression()\n",
    "sclf = StackingClassifier(classifiers=[clf1, clf1, clf2, clf3], \n",
    "                          meta_classifier=lr)\n",
    "\n",
    "params = {'kneighborsclassifier-1__n_neighbors': [1, 5],\n",
    "          'kneighborsclassifier-2__n_neighbors': [1, 5],\n",
    "          'randomforestclassifier__n_estimators': [10, 50],\n",
    "          'meta_classifier__C': [0.1, 10.0]}\n",
    "\n",
    "grid = GridSearchCV(estimator=sclf, \n",
    "                    param_grid=params, \n",
    "                    cv=5,\n",
    "                    refit=True)\n",
    "grid.fit(X, y)\n",
    "\n",
    "cv_keys = ('mean_test_score', 'std_test_score', 'params')\n",
    "\n",
    "for r, _ in enumerate(grid.cv_results_['mean_test_score']):\n",
    "    print(\"%0.3f +/- %0.2f %r\"\n",
    "          % (grid.cv_results_[cv_keys[0]][r],\n",
    "             grid.cv_results_[cv_keys[1]][r] / 2.0,\n",
    "             grid.cv_results_[cv_keys[2]][r]))\n",
    "\n",
    "print('Best parameters: %s' % grid.best_params_)\n",
    "print('Accuracy: %.2f' % grid.best_score_)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Note**\n",
    "\n",
    "The `StackingClassifier` also enables grid search over the `classifiers` argument. When there are level-mixed hyperparameters, GridSearchCV will try to replace hyperparameters in a top-down order, i.e., classifers -> single base classifier -> classifier hyperparameter. For instance,  given a hyperparameter grid such as\n",
    "\n",
    "    params = {'randomforestclassifier__n_estimators': [1, 100],\n",
    "    'classifiers': [(clf1, clf1, clf1), (clf2, clf3)]}\n",
    "    \n",
    "it will first use the instance settings of either (clf1, clf1, clf1) or (clf2, clf3). Then it will replace the `'n_estimators'` settings for a matching classifier based on `'randomforestclassifier__n_estimators': [1, 100]`."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Example 4 - Stacking of Classifiers that Operate on Different Feature Subsets"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The different level-1 classifiers can be fit to different subsets of features in the training dataset. The following example illustrates how this can be done on a technical level using scikit-learn pipelines and the `ColumnSelector`:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "StackingClassifier(average_probas=False,\n",
       "                   classifiers=[Pipeline(memory=None,\n",
       "                                         steps=[('columnselector',\n",
       "                                                 ColumnSelector(cols=(0, 2),\n",
       "                                                                drop_axis=False)),\n",
       "                                                ('logisticregression',\n",
       "                                                 LogisticRegression(C=1.0,\n",
       "                                                                    class_weight=None,\n",
       "                                                                    dual=False,\n",
       "                                                                    fit_intercept=True,\n",
       "                                                                    intercept_scaling=1,\n",
       "                                                                    l1_ratio=None,\n",
       "                                                                    max_iter=100,\n",
       "                                                                    multi_class='auto',\n",
       "                                                                    n_jobs=None,\n",
       "                                                                    penalty='l2',\n",
       "                                                                    random_state=None,\n",
       "                                                                    sol...\n",
       "                   meta_classifier=LogisticRegression(C=1.0, class_weight=None,\n",
       "                                                      dual=False,\n",
       "                                                      fit_intercept=True,\n",
       "                                                      intercept_scaling=1,\n",
       "                                                      l1_ratio=None,\n",
       "                                                      max_iter=100,\n",
       "                                                      multi_class='auto',\n",
       "                                                      n_jobs=None, penalty='l2',\n",
       "                                                      random_state=None,\n",
       "                                                      solver='lbfgs',\n",
       "                                                      tol=0.0001, verbose=0,\n",
       "                                                      warm_start=False),\n",
       "                   store_train_meta_features=False, use_clones=True,\n",
       "                   use_features_in_secondary=False, use_probas=False,\n",
       "                   verbose=0)"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.datasets import load_iris\n",
    "from mlxtend.classifier import StackingClassifier\n",
    "from mlxtend.feature_selection import ColumnSelector\n",
    "from sklearn.pipeline import make_pipeline\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "\n",
    "iris = load_iris()\n",
    "X = iris.data\n",
    "y = iris.target\n",
    "\n",
    "pipe1 = make_pipeline(ColumnSelector(cols=(0, 2)),\n",
    "                      LogisticRegression())\n",
    "pipe2 = make_pipeline(ColumnSelector(cols=(1, 2, 3)),\n",
    "                      LogisticRegression())\n",
    "\n",
    "sclf = StackingClassifier(classifiers=[pipe1, pipe2], \n",
    "                          meta_classifier=LogisticRegression())\n",
    "\n",
    "sclf.fit(X, y)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Example 5 - Using Pre-fitted Classifiers"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Assume that we previously fitted our classifiers:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn import model_selection\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.naive_bayes import GaussianNB \n",
    "from sklearn.ensemble import RandomForestClassifier\n",
    "import numpy as np\n",
    "\n",
    "clf1 = KNeighborsClassifier(n_neighbors=1)\n",
    "clf2 = RandomForestClassifier(random_state=1)\n",
    "clf3 = GaussianNB()\n",
    "lr = LogisticRegression()\n",
    "\n",
    "for clf in (clf1, clf2, clf3):\n",
    "    clf.fit(X, y)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "By setting `fit_base_estimators=False`, it will enforce `use_clones` to be False and the `StackingClassifier` will not re-fit these classifers to save computational time:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Warning: enforce use_clones to be False\n",
      "accuracy: 1.0\n"
     ]
    }
   ],
   "source": [
    "from mlxtend.classifier import StackingClassifier\n",
    "import copy\n",
    "sclf = StackingClassifier(classifiers=[clf1, clf2, clf3], \n",
    "                          meta_classifier=lr, fit_base_estimators=False)\n",
    "\n",
    "labels = ['KNN', 'Random Forest', 'Naive Bayes', 'StackingClassifier']\n",
    "\n",
    "sclf.fit(X, y)\n",
    "\n",
    "print('accuracy:', np.mean(y == sclf.predict(X)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "However, please note that `fit_base_estimators=False` is incompatible to any form of cross-validation that is done in e.g., `model_selection.cross_val_score` or `model_selection.GridSearchCV`, etc., since it would require the classifiers to be refit to the training folds. Thus, only use `fit_base_estimators=False` if you want to make a prediction directly without cross-validation."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Example 6 -- ROC Curve with `decision_function`"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Like other scikit-learn classifiers, the `StackingCVClassifier` has an `decision_function` method that can be used for plotting ROC curves. Note that the `decision_function` expects and requires the meta-classifier to implement a `decision_function`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn import model_selection\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.neighbors import KNeighborsClassifier\n",
    "from sklearn.svm import SVC\n",
    "from sklearn.ensemble import RandomForestClassifier\n",
    "from mlxtend.classifier import StackingCVClassifier\n",
    "from sklearn.metrics import roc_curve, auc\n",
    "import numpy as np\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn import datasets\n",
    "from sklearn.preprocessing import label_binarize\n",
    "from sklearn.multiclass import OneVsRestClassifier\n",
    "\n",
    "\n",
    "iris = datasets.load_iris()\n",
    "X, y = iris.data[:, [0, 1]], iris.target\n",
    "\n",
    "\n",
    "# Binarize the output\n",
    "y = label_binarize(y, classes=[0, 1, 2])\n",
    "n_classes = y.shape[1]\n",
    "\n",
    "\n",
    "\n",
    "RANDOM_SEED = 42\n",
    "\n",
    "\n",
    "X_train, X_test, y_train, y_test = train_test_split(\n",
    "    X, y, test_size=0.33, random_state=RANDOM_SEED)\n",
    "\n",
    "clf1 =  LogisticRegression()\n",
    "clf2 = RandomForestClassifier(random_state=RANDOM_SEED)\n",
    "clf3 = SVC(random_state=RANDOM_SEED)\n",
    "lr = LogisticRegression()\n",
    "\n",
    "\n",
    "sclf = StackingClassifier(classifiers=[clf1, clf2, clf3],\n",
    "                          meta_classifier=lr)\n",
    "\n",
    "\n",
    "# Learn to predict each class against the other\n",
    "classifier = OneVsRestClassifier(sclf)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Using `predict_proba()`**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "y_score = classifier.fit(X_train, y_train).predict_proba(X_test)\n",
    "\n",
    "# Compute ROC curve and ROC area for each class\n",
    "fpr = dict()\n",
    "tpr = dict()\n",
    "roc_auc = dict()\n",
    "for i in range(n_classes):\n",
    "    fpr[i], tpr[i], _ = roc_curve(y_test[:, i], y_score[:, i])\n",
    "    roc_auc[i] = auc(fpr[i], tpr[i])\n",
    "\n",
    "# Compute micro-average ROC curve and ROC area\n",
    "fpr[\"micro\"], tpr[\"micro\"], _ = roc_curve(y_test.ravel(), y_score.ravel())\n",
    "roc_auc[\"micro\"] = auc(fpr[\"micro\"], tpr[\"micro\"])\n",
    "\n",
    "plt.figure()\n",
    "lw = 2\n",
    "plt.plot(fpr[2], tpr[2], color='darkorange',\n",
    "         lw=lw, label='ROC curve (area = %0.2f)' % roc_auc[2])\n",
    "plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--')\n",
    "plt.xlim([0.0, 1.0])\n",
    "plt.ylim([0.0, 1.05])\n",
    "plt.xlabel('False Positive Rate')\n",
    "plt.ylabel('True Positive Rate')\n",
    "plt.title('Receiver operating characteristic example')\n",
    "plt.legend(loc=\"lower right\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Using `decision_function()`**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "y_score = classifier.fit(X_train, y_train).decision_function(X_test)\n",
    "\n",
    "# Compute ROC curve and ROC area for each class\n",
    "fpr = dict()\n",
    "tpr = dict()\n",
    "roc_auc = dict()\n",
    "for i in range(n_classes):\n",
    "    fpr[i], tpr[i], _ = roc_curve(y_test[:, i], y_score[:, i])\n",
    "    roc_auc[i] = auc(fpr[i], tpr[i])\n",
    "\n",
    "# Compute micro-average ROC curve and ROC area\n",
    "fpr[\"micro\"], tpr[\"micro\"], _ = roc_curve(y_test.ravel(), y_score.ravel())\n",
    "roc_auc[\"micro\"] = auc(fpr[\"micro\"], tpr[\"micro\"])\n",
    "\n",
    "plt.figure()\n",
    "lw = 2\n",
    "plt.plot(fpr[2], tpr[2], color='darkorange',\n",
    "         lw=lw, label='ROC curve (area = %0.2f)' % roc_auc[2])\n",
    "plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--')\n",
    "plt.xlim([0.0, 1.0])\n",
    "plt.ylim([0.0, 1.05])\n",
    "plt.xlabel('False Positive Rate')\n",
    "plt.ylabel('True Positive Rate')\n",
    "plt.title('Receiver operating characteristic example')\n",
    "plt.legend(loc=\"lower right\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# API"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "ename": "FileNotFoundError",
     "evalue": "[Errno 2] No such file or directory: '../../api_modules/mlxtend.classifier/StackingClassifier.md'",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mFileNotFoundError\u001b[0m                         Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-29-22442b2b5b86>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mwith\u001b[0m \u001b[0mopen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'../../api_modules/mlxtend.classifier/StackingClassifier.md'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'r'\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      2\u001b[0m     \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mread\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: '../../api_modules/mlxtend.classifier/StackingClassifier.md'"
     ]
    }
   ],
   "source": [
    "with open('../../api_modules/mlxtend.classifier/StackingClassifier.md', 'r') as f:\n",
    "    print(f.read())"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3.10.6 64-bit",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.6"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  },
  "vscode": {
   "interpreter": {
    "hash": "bf60121a5b01270aa3349ef43fb139e7fd99866fa1ce176a6b5a191f4d6f9b53"
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
